﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTRecursoService.Dominio;
using System.Data.SqlClient;



namespace RESTRecursoService.Persistencia
{
    public class RecursoDAO
    {

        public Recurso Crear(Recurso recursoACrear)
        {
            Recurso recursoCreado = null;
            string sql = "INSERT INTO t_Recurso values(@cod, @nom, @prec, @tpo)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", recursoACrear.Codigo));
                    com.Parameters.Add(new SqlParameter("@nom", recursoACrear.Nombre));
                    com.Parameters.Add(new SqlParameter("@prec", recursoACrear.Precio));
                    com.Parameters.Add(new SqlParameter("@tpo", recursoACrear.Tipo));
                    com.ExecuteNonQuery();
                }
            }
            recursoCreado = Obtener(recursoACrear.Codigo);
            return recursoCreado;
        }

        public Recurso Obtener(string codigo)
        {
            Recurso recursoEncontrado = null;
            int codigo1;
            int precio1;
            int tipo1;
            string cadena1="";
            //string sql = "SELECT * FROM t_Recurso WHERE codigo=@cod ";
            string sql = "select r.codigo, r.nombre, r.precio,r.tipo, t.nombre as nombretipo from t_Recurso r, t_Tipo t where r.tipo=t.codigo and r.codigo=@cod ";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", Convert.ToInt32(codigo)));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            codigo1 = (int)resultado["codigo"];
                            precio1 = Convert.ToInt32(resultado["precio"]);
                            tipo1 = Convert.ToInt32(resultado["tipo"]);
                            cadena1 = codigo1 + "";
                            recursoEncontrado = new Recurso()
                            {
                                Codigo = (string)cadena1,
                                Nombre = (string)resultado["nombre"],
                                Precio = precio1,//(int)resultado["precio"],
                                Tipo = tipo1,
                                NombreTipo = (string)resultado["nombretipo"]
                            };
                        }
                    }
                }
            }
            return recursoEncontrado;
        }

        public Recurso Modificar(Recurso recursoAModificar)
        {
            //TODO:
            Recurso recursoModificado = null;
            string sql = "UPDATE t_Recurso SET nombre =@nom, precio=@prec,tipo=@tpo WHERE codigo=@cod ";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", recursoAModificar.Codigo));
                    com.Parameters.Add(new SqlParameter("@nom", recursoAModificar.Nombre));
                    com.Parameters.Add(new SqlParameter("@prec", recursoAModificar.Precio));
                    com.Parameters.Add(new SqlParameter("@tpo", recursoAModificar.Tipo));
                    com.ExecuteNonQuery();
                }
            }
            recursoModificado = Obtener(recursoAModificar.Codigo);
            return recursoModificado;
        }

        public void Eliminar(string codigo)
        {
            //TODO:

            string sql = "DELETE t_Recurso WHERE codigo=@cod ";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", codigo));
                    com.ExecuteNonQuery();
                }
            }

        }

        public List<Recurso> ListarTodos()
        {
            //TODO:
            Recurso recursoListados = null;
            int codigo1;
            int precio1;
            int tipo1;
            string cadena1 = "";
            List<Recurso> lista = new List<Recurso>();
            string sql = "SELECT r.codigo, r.nombre, r.precio,r.tipo, t.nombre as nombretipo FROM t_Recurso r, t_Tipo t where r.tipo=t.codigo";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            codigo1 = (int)resultado["codigo"];
                            precio1 = Convert.ToInt32(resultado["precio"]);
                            tipo1 = Convert.ToInt32(resultado["tipo"]);
                            cadena1 = codigo1 + "";
                            recursoListados = new Recurso()
                            {
                                Codigo = (string)cadena1,
                                Nombre = (string)resultado["nombre"],
                                Precio = precio1,//(int)resultado["precio"],
                                Tipo = tipo1,
                                NombreTipo = (string)resultado["nombretipo"],
                                
                            };
                            lista.Add(recursoListados);
                        }

                    }
                }
            }
            return lista;
        }

    }
}